home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0039 / source / dcquickf.asm < prev    next >
Assembly Source File  |  1997-04-16  |  2KB  |  77 lines

  1. ;
  2. ;    Some (long) integer logic routines
  3. ;
  4.     MODULE DCQuickFunctions
  5. ;
  6.     SYMBOLS
  7. ;
  8.     label LUDivRem
  9. Start:        ; return garbage if divide by zero
  10. .1:    lea    saveregs-.1(pc),a0
  11.         movem.l    a1/a2/a3,-(a0) 
  12.     move.l    (a7)+,a3    ;return address
  13.     move.l    (a7)+,a1    ;remainder address
  14.         move.l    (a7)+,a2    ;integer address
  15.         move.w    (a7)+,d1    ;divisor
  16.     move.l    (a7)+,d0    ;dividend
  17.         tst.w    d1
  18.         beq.s    ludiv0        ;divide by zero
  19.     divu    d1,d0        ;divide it
  20. ludiv0:
  21.     move.w    d0,(a2)        ;integer 
  22.     swap    d0        ;get remainder
  23.     move.w    d0,(a1)        ;remainder
  24. lubye:
  25.     move.l    a3,-(a7)    ;ret addr
  26.     movem.l    (a0)+,a1/a2/a3
  27.     rts
  28.  
  29.     label SetBit    ; set bit n in array of bytes.
  30. sb1:
  31. .1:    lea    saveregs-.1(pc),a0
  32.         movem.l    a1/a2/a3,-(a0) 
  33.     move.l    (a7)+,a3    ;return address
  34.         addq.l    #4,a7        ;lose number of bytes
  35.         addq.l    #4,a7        ;lose high bound
  36.     move.l    (a7)+,a1    ;start addr of array
  37.     move.w    (a7)+,d0    ;bit to set
  38.         ext.l    d0
  39.         divu    #8,d0
  40.     move.w    d0,d1        ;displacement into array
  41.     swap    d0        ;remainder to lower word
  42.         xor.b    #7,d0        ;bit zero = bit 7.
  43.     bset.b  d0,0(a1,d1.w)   ;set bit
  44.     move.l    a3,-(a7)    ;ret addr
  45.     movem.l    (a0)+,a1/a2/a3
  46.     rts
  47.  
  48.     label TestBit    ; Test bit n in array of bytes.
  49. tb1:    
  50. .1:    lea    saveregs-.1(pc),a0
  51.         movem.l    a1/a2/a3,-(a0) 
  52.     move.l    (a7)+,a3    ;return address
  53.         addq.l    #4,a7        ;lose number of bytes
  54.         addq.l    #4,a7        ;lose high bound
  55.     move.l    (a7)+,a1    ;start addr of array
  56.     move.w    (a7)+,d2    ;bit to test
  57.     moveq.l    #0,d0        ;assume not set
  58.     ext.l    d2
  59.         divu    #8,d2
  60.     move.w    d2,d1        ;displacement into array
  61.     swap    d2        ;remainder to lower word
  62.         xor.b    #7,d2        ;bit zero = bit 7.
  63.     btst.b  d2,0(a1,d1.w)   ;set bit
  64.     beq.s    tbend
  65.     subq.l    #1,d0        ;all bits on
  66. tbend:
  67.     move.l    a3,-(a7)    ;ret addr
  68.     movem.l    (a0)+,a1/a2/a3
  69.     rts
  70.  
  71. sregs:    dq    1
  72.         dq      2
  73.     dq    3
  74. saveregs:
  75.     dq    4
  76.     end
  77.